Except for rather esoteric situations (destroying an object created by the 'placement new operator'), you never need to explicitly call a dtor. When you derive a class, whether you define a dtor for it or not, the compiler makes sure the dtors for subobjects and base class(es) will be invoked immediately after the derived destructor's body ('{...}').